package ticket.impresion;

import CDB.Ticket;
import java.util.HashMap;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;

public class ControlTicketNDB {

    private DefaultTableModel modelo;
    private List<Ticket> lista;
    private HashMap map;

    public ControlTicketNDB(DefaultTableModel modelo, String empleado, String venta) {
        this.modelo = modelo;
        //mandamos los parametros que no se inclullen en la coleccion
        map = new HashMap();
        map.put("empleado", empleado);
        map.put("venta", venta);
        ejecutarReporte();
    }

    public ControlTicketNDB(List<Ticket> lista, String empleado, String venta) {
        this.lista = lista;
        map = new HashMap();
        map.put("empleado", empleado);
        map.put("venta", venta);
        ejecutarReporte();
    }

    private void ejecutarReporte() {
        int i = 0;
        java.util.Vector<Ticket> collectionTicket = new java.util.Vector<Ticket>();
        //Recorre cada fila de la tabla
        if (lista.isEmpty()) {
            while (i < modelo.getRowCount()) {
                //Pasa cada objeto de la tabla Venta a la coleccioneTicket
                collectionTicket.add(
                        new Ticket(
                        modelo.getValueAt(i, 1).toString(),
                        Float.parseFloat(modelo.getValueAt(i, 2).toString().substring(1))));
                i++;
            }
        } else {
            while(i<lista.size()){
                collectionTicket.add(lista.get(i));
                i++;
            }
        }
        if (true) {
            try {
                //Elige la ruta del reporte
                String rutaReporte = System.getProperty("user.dir") + "/imprecionTicket.jrxml";
                //si la ruta del reporte es null marca error
                if (rutaReporte == null) {
                    JOptionPane.showMessageDialog(null,
                            "Error al cargar reporte, motivos:/n"
                            + "-No existe el archivo a cargar/n"
                            + "-La ruta esta mal especificada",
                            "Generar Reporte", JOptionPane.ERROR_MESSAGE);
                }
                JasperReport masterReport = null;
                try {
                    masterReport = JasperCompileManager.compileReport(rutaReporte);
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e,
                            "Error al cargar reporte", JOptionPane.ERROR_MESSAGE);
                    System.out.println(e);
                }
                //Llena el reporte con los datos especificados
                JasperPrint jasperPrint = JasperFillManager.fillReport(
                        masterReport,//va a contener la informacion 
                        map,//para los parametros
                        //Es collectionTicket la fuente de datos
                        new JRBeanCollectionDataSource(collectionTicket));
                //Manda el comando para mostrar en pantalla el reporte
                JasperViewer.viewReport(jasperPrint, false);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Error al compilar reporte",
                        "Generar Reporte", JOptionPane.ERROR_MESSAGE);
                e.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No existen registros para mostrar en reporte",
                    "Generar Reporte", JOptionPane.ERROR_MESSAGE);
        }
    }
}
